/*
 * Returns a new XMLHttpRequest object, or false if this browser
 * doesn't support it
 */
function newXMLHttpRequest() {

  var xmlreq = false;

  if (window.XMLHttpRequest) {

    // Create XMLHttpRequest object in non-Microsoft browsers
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    // Create XMLHttpRequest via MS ActiveX
    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e1) {

      // Failed to create required ActiveXObject

      try {
        // Try version supported by older versions
        // of Internet Explorer

        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {

        // Unable to create an XMLHttpRequest with ActiveX
      }
    }
  }

  return xmlreq;
}

/*
* Returns a function that waits for the specified XMLHttpRequest
* to complete, then passes it XML response to the given handler function.
* req - The XMLHttpRequest whose state is changing
* responseXmlHandler - Function to pass the XML response to
*/
function getReadyStateHandler(req, responseXmlHandler) {

  // Return an anonymous function that listens to the XMLHttpRequest instance
  return function () {

    // If the request's status is "complete"
    if (req.readyState == 4) {
       
      // Check that we received a successful response from the server
      if (req.status == 200) {

        // Pass the XML payload of the response to the handler function.
        responseXmlHandler(req.responseXML);

      } else {

        // An HTTP problem has occurred
        alert("HTTP error "+req.status+": "+req.statusText);
      }
    }
  }
}


function updateBack() {
//do nothing
}

/*
 * send an XHR request that contains the new portlet positions
 */
function sendXHRRequest(requestString){
 
  // Obtain an XMLHttpRequest instance
  	var req = newXMLHttpRequest();

  // Set the handler function to receive callback notifications
  // from the request object
  	req.onreadystatechange = getReadyStateHandler(req, updateBack);
  
  // Open an HTTP POST connection to the update servlet
  // Third parameter specifies request is asynchronous.
 	req.open("POST","dndupdate",true);

  // Specify that the body of the request contains form data
  	req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  // Send request
 	req.send(requestString);
  
}